package com.java.yz.day08.CanShuDemo;

/*
    形式参数：
        基本数据类型：当基本数据类型作为方法的形式参数的时候，将来调用时需要传入具体的数值
        引用数据类型：（类，接口，数组）
            具体的类：当你看到一个方法的形式参数类型是具体的类的话，将来调用时就要需要传入该类或者该类的子类对象
            抽象类：当你看到一个方法的形式参数类型是抽象的类的话，将来调用时就要需要传入该抽象类的具体子类对象
            接口：当你看到一个方法的形式参数类型是接口的话，将来调用时就要需要传入实现该接口的子类对象
 */
//具体的类
class StudentText1{
    public void f1(){
        System.out.println("好好学习，天天向上1");
    }
}
class StudentText11{
    public void f11(StudentText1 studentText1){
        studentText1.f1();
    }
}


//抽象类

abstract class StudentText2{
    public void f2(){
        System.out.println("好好学习，天天向上2");
    }  //因为抽象类无法实例化，所以就子类继承
}
class StudentText222 extends StudentText2{

}
class StudentText22{
    public void f22(StudentText2 studentText2){
        studentText2.f2();
    }
}


//接口
interface Inter1{
    void f3();
}  //因为接口无法实例化，所以就子类继承
class StudentText33 implements Inter1{
    @Override
    public void f3() {
        System.out.println("好好学习，天天向上3");
    }
}
class StudentText3{
    public void f33(Inter1 inter1){
        inter1.f3();
    }
}
public class StudentDemo1 {
    public static void main(String[] args) {
        //具体的类的实现
        StudentText11 studentText11 = new StudentText11();
        StudentText1 studentText1 = new StudentText1();
        studentText11.f11(studentText1);  //需要传入该类或者该类的子类对象

        //抽象的类的实现
        StudentText22 studentText22 = new StudentText22();
        StudentText222 studentText222 = new StudentText222();
        studentText22.f22(studentText222);//调用时就要需要传入该抽象类的具体子类对象

        //接口的实现
        StudentText3 studentText3 = new StudentText3();
        StudentText33 studentText33 = new StudentText33();
        studentText3.f33(studentText33);  //调用时就要需要传入实现该接口的子类对象
    }
}
